package model;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


public class JuegoConsola {
	private Fantasma fantasma;
	private int tiempoPresa,tiempoMuerto;
	private Temporizador temporizador;
	
	
	public JuegoConsola(){
		
	}
	
	public JuegoConsola(int tiempoPresa, int tiempoMuerto){
		fantasma=new Fantasma(null,new Zonzo());
		this.tiempoPresa=tiempoPresa;
		this.tiempoMuerto=tiempoMuerto;
		temporizador=new Temporizador(fantasma);
	}
	
	/**
	 * Si el temporizador esta corriendo lo cancela y crea uno nuevo
	 */
	public void iniciarTemporizador(){
		if(temporizador.isRunning()){
			temporizador.cancel();
			temporizador=new Temporizador(fantasma);
		}
	}

	public void temporizarFantasma(){
		iniciarTemporizador();
		if(fantasma.getEstadoFantasma().isMuerto()){
			temporizador.temporizar(tiempoMuerto);
		}else if(fantasma.getEstadoFantasma().isPresa()){
			temporizador.temporizar(tiempoPresa);
		}
	}
	
	public String interactuarConFantasma(String comando){
		Class<? extends Fantasma> fantasmaClass=fantasma.getClass();
		Method metodoFantasma;
		
		try {
			metodoFantasma = fantasmaClass.getMethod(comando);
			if(comando.equalsIgnoreCase("mostrarEstado")){
				String result = (String)metodoFantasma.invoke(fantasma);
			}else{
				boolean result = (Boolean)metodoFantasma.invoke(fantasma);
			}
		} catch (NoSuchMethodException e){
			return "ERROR EN EJECUCIÓN DEL COMANDO: "+comando+"\n"+
		           "Comandos a ejecutar por consola morir, mover, comer, molestar, mostrarEstado, reiniciarEstado, convertirEnPresa, salir\n"+	
		           "INTENTE NUEVAMENTE\n";
		} catch (InvocationTargetException e) {
            e.printStackTrace();
            return "error";
        } catch (IllegalAccessException e) {
            e.printStackTrace();
            return "error";
        }


		temporizarFantasma();
					
		return Mensaje.getInstancia().getValor();
	}
}
